#include <flann/flann.hpp>
#include <memory>
#include <vector>
#include <iostream>
#include <stdexcept>


// KDTree类用于封装KD树的构建和查询
class KDTree {
public:
    // 构造函数
    KDTree(const std::vector<std::vector<float>>& data_points, int tree_num = 1) ;
    // 搜索最近点的方法
    std::vector<float> findNearestPoint(const std::vector<float>& query_point, int& index) const ;

private:
    int dimensions_;  // 数据维度
    std::vector<std::vector<float>> data_points_;  // 数据集
    std::unique_ptr<flann::Index<flann::L2<float>>> index_;  // KD树索引
    std::unique_ptr<float[]> flann_data_;
};